Processing: 正弦波を使ったおもしろ図形(おにぎり、花、金平糖、その他)
https://gyazo.com/63376c71ef00704396f26ce671ac58df
はじめに
Processingで正弦波を使って様々な図形を作ってみました。すべて同じ関数の変数をいじるだけで作成できます。
使う関数
今回使う関数はwave_circle()という自作の関数です。この関数は元々ジグザグした円を作るために作成しました。
wave_circle()
code:processing
void setup() {
size(600, 600);
fill(-1);
wave_circle(width/2, height/2, 100, 10, 10);
}
//posX,posY: 座標, r: 半径, wavelength: 波長(波の幅), amplitude: 振幅(波の高さ)
void wave_circle(float posX, float posY, float r, float wavelength, float amplitude) {
pushMatrix();
translate(posX, posY);
beginShape();
for (float i=0; i <= 2*PI; i += PI/180) {
float x = cos(i)*( r + amplitude * ( sin(i*wavelength) - 1 ) );
float y = sin(i)*( r + amplitude * ( sin(i*wavelength)-1) );
vertex(x, y);
}
endShape();
popMatrix();
}
出力結果
https://gyazo.com/4a1435ca613877e53aa8b5f68a2dfebf
上の図のように金平糖のようなジグザグした図形を作ることができます。これで目的は達成したのですが、変数をいじってみたら様々な形に変わることが分かりました。
追記
前回sin(i*wavelength)だったところを( sin(i*wavelength) - 1 )にしました
これで半径が100の円と同じ大きさの金平糖が作れます
https://gyazo.com/73adb686ced8f21041bf9c7821b95956
図形一覧
ここからはどのような変数を入れるといかなる図形になるの一覧にしました。
金平糖
wavelength = 10 , amplitude = r/10
https://gyazo.com/4a1435ca613877e53aa8b5f68a2dfebf
ミートボール
wavelength = 20, amplitude = r/100
https://gyazo.com/04a26f93c6f6eff386cc1cda7d486948
ウニ
wavelength = 100, amplitude = r/10
https://gyazo.com/23bf2939dd917b4bd71c2237e075183c
おにぎり(角丸多角形)
wavelength = 3, amplitude = r/10
(wavelength = n のとき角丸のn角形になります)
https://gyazo.com/7e297d6473ffd11be5ac5b775d1f1e73
花びら
wavelength > 2, amplitude = r
(図はwavelength = 5のとき)
https://gyazo.com/09dde9fceb165bb50abf6cbe384572af
ヒトデ、星
wavelength = 5, amplitude = (3*r) / 10
https://gyazo.com/80c1118856053a6cfbf57f3d9308587d
作品事例
この関数を使って作ってみた作品です
角丸多角形
https://gyazo.com/a0850fce8aa60939ffbd9fea0b9b8129
金平糖
https://gyazo.com/60d043fbe153e462c5f0b9d224e134a5
鱗
https://gyazo.com/63376c71ef00704396f26ce671ac58df
line()と組み合わせて
https://gyazo.com/b0e5b2e3c51f39c8b400cb7a9debfa21
おわりに
なんとなく作ってみた関数でいろいろな図形を描くことができたことに驚きました。なんとなく入れた数字で想像してなかった図形に巡り合えることが興味深かったです。もしかしたら僕も発見してない図形があるかもしれないので試してみると面白いかもしれません。